package com.cn.fangshuo.util;

import cn.hutool.crypto.digest.HMac;
import cn.hutool.crypto.digest.HmacAlgorithm;
import lombok.experimental.UtilityClass;

import java.nio.charset.StandardCharsets;

@UtilityClass
public class HmacSha256Util {

    /**
     * 生成 HMAC-SHA256 签名（十六进制格式）
     * @param content 待签名内容
     * @param secretKey 密钥
     * @return 16进制小写签名串
     */
    public String hmacSha256Hex(String content, String secretKey) {
        HMac hmac = new HMac(HmacAlgorithm.HmacSHA256, secretKey.getBytes(StandardCharsets.UTF_8));
        return hmac.digestHex(content);
    }

    /**
     * 生成 HMAC-SHA256 签名（Base64格式）
     * @param content 待签名内容
     * @param secretKey 密钥
     * @return Base64编码的签名
     */
    public String hmacSha256Base64(String content, String secretKey) {
        HMac hmac = new HMac(HmacAlgorithm.HmacSHA256, secretKey.getBytes(StandardCharsets.UTF_8));
        return hmac.digestBase64(content, false);
    }

    /**
     * 验证 HMAC-SHA256 签名
     * @param content 原始内容
     * @param secretKey 密钥
     * @param signature 待验证的签名
     * @return 是否验证通过
     */
    public boolean verify(String content, String secretKey, String signature) {
        String actualSignature = hmacSha256Hex(content, secretKey);
        return actualSignature.equals(signature);
    }
}
